/*
    Asignatura: Procesadores de lenguajes.
    Practica de labotario numero 9.
    Autores:
                Guillermo Garcia Juanes (Alu3889)
                Jose Antonio Hernandez Gonzalez (Alu3809)

    Fichero: AnasinXML-v1.g
    Contenido: Analizador Sintactico practica numero 9.
*/
parser grammar AnasinXMLv1;

options{
    tokenVocab = AnalexXMLv1;
}

@header{ package pl.equipo13.p9; 
import pl.equipo13.p9.exceptions.EtiquetaNoCerradaException;
import pl.equipo13.p9.exceptions.AutorErrorException;
}

/*----------------------------------------------------REGLAS-SINTACTICO----------------------------------------------------*/

entrada: biblioteca EOF;
    catch [EtiquetaNoCerradaException ance] {
        System.out.println(ance.toString());
    }
    catch [AutorErrorException aee] {
        System.out.println(aee.toString());
    }
biblioteca: ABIBLIOTECA (libro)* CBIBLIOTECA;
    catch [MismatchedTokenException ae] {
        if (ae.expecting == CBIBLIOTECA)
            throw new EtiquetaNoCerradaException(ae.token, "</biblioteca>");
        else
            throw ae;
    }
libro: ALIBRO titulo autor editorial CLIBRO;
    catch [MismatchedTokenException ae] {
        if (ae.expecting == CLIBRO)
            throw new EtiquetaNoCerradaException(ae.token, "</libro>");
        else
            throw ae;
    }
titulo: ATITULO CADENA CTITULO;
    catch [MismatchedTokenException ae] {
        if (ae.expecting == CTITULO)
            throw new EtiquetaNoCerradaException(ae.token, "</titulo>");
        else
            throw ae;
    }
autor: AAUTOR CADENA CAUTOR; 
    catch [MismatchedTokenException ae] { 
        if (ae.expecting == CAUTOR)
            throw new EtiquetaNoCerradaException(ae.token, "</autor>");
        else if ("<editorial>".equals(ae.token.getText())) 
            throw new AutorErrorException(ae.token,"<editorial>");
        else
            throw ae; 
    }
editorial: AEDITORIAL CADENA CEDITORIAL; 
    catch [MismatchedTokenException ae] { 
        if (ae.expecting == CEDITORIAL) 
            throw new EtiquetaNoCerradaException(ae.token, "</editorial>");
        else if ("<autor>".equals(ae.token.getText()))
            throw new AutorErrorException(ae.token,"<autor>");
        else 
            throw ae;
    }
